#include <stdio.h>
#include<stdlib.h>
#include<stdbool.h>
struct ListNode {
      int val;
      struct ListNode *next;
};

 typedef struct ListNode ListNode;
//打印函数
void SLPrint(ListNode* head);
//1——删除链表的等于 val 的结点
struct ListNode* removeElements(struct ListNode* head, int val);
//-2——反转链表
struct ListNode* reverseList(struct ListNode* head);
//3——找到并返回链表中间节点
struct ListNode* middleNode(struct ListNode* head);
//4——合并两个有序链表
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2);
//5——链表分割
ListNode* partition(ListNode* pHead, int x);
//6——链表的回文结构
//方法一：将链表中的数据插入到数组中进行双指针判断回文结构
bool chkPalindrome(ListNode* A);
//方法二
bool chkPalindrome2(ListNode* A);
//7——返回倒数第 k 个节点中的数值
int kthToLast(struct ListNode* head, int k);
//8——相交链表
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB);
//9——环状链表
bool hascycle(ListNode* head);
//10——环状链表 2——找入环点
struct ListNode *detectCycle(struct ListNode *head);
//随机链表的复制

